[THM]John the Ripper: The Basics
下载
安装
git下来然后看文档
1 | cat ./doc/INSTALL-UBUNTU |
然后跟着做就行
1 | cd src |
1 | ./configure --disable-openmp && make -s clean && make -sj4 |
测试:在john/run
1 | ./john --test=0 |

破解基本哈希
基本使用
自动破解
示例命令
1 | john --wordlist=/usr/share/wordlists/rockyou.txt hash_to_crack.txt |
格式特定破解
确定哈希值
有时,John 可能不会与自动识别和加载哈希值很好地配合,可以使用一个名为 hash-identifier 的 Python 工具,它非常易于使用,并会输出要破解的哈希值可能属于哪些不同类型的哈希,如果第一个方法失败,这将提供更多选择。
下载
1 | wget https://gitlab.com/kalilinux/packages/hash-identifier/-/raw/kali/master/hash-id.py |
使用
1 | python3 hash-id.py |

用法
一旦确定了要处理的哈希值,可以告诉 John 在破解提供的哈希值时使用它,语法如下john --format=[format] --wordlist=[path to wordlist] [path to file]
1 | john --format=raw-md5 --wordlist=/usr/share/wordlists/rockyou.txt hash_to_crack.txt |
格式说明
当你告诉 John 使用格式时,如果你处理的是标准哈希类型,例如上面的 md5,你必须用 raw- 作为前缀来告诉 John 你只处理标准哈希类型,尽管这并不总是适用。要检查是否需要添加前缀,你可以使用
1 | john --list=formats |
列出 John 的所有格式,然后手动检查或使用类似
1 | john --list=formats | grep -iF "md5" |
的 grep 命令搜索你的哈希类型。
回答问题
hash1.txt 是什么类型的哈希?
用hash-id.py跑一下
hash1.txt 的破解值是什么?
1 | john --format=raw-md5 --wordlist=/usr/share/wordlists/rockyou.txt hash1.txt |

hash2.txt 是什么类型的哈希?
之前hash-id.py顷刻炼化
hash2.txt 的破解值是什么?
注意到之前显示类型有显示个MySQL5 - SHA-1
再根据类型前缀查询查到有个mysql-sha1
感觉应该就是它
1 | john --format=mysql-sha1 --wordlist=/usr/share/wordlists/rockyou.txt hash2.txt |

很尴尬
换成标准的看看,搜前缀还是要带-iF,要不然大写的会忽略
1 | john --list=formats|grep -iF sha1 |

1 | john --format=Raw-SHA1 --wordlist=/usr/share/wordlists/rockyou.txt hash2.txt |

hash3.txt 是什么类型的哈希?

hash4.txt 是什么类型的哈希?
Whirlpool
hash3.txt 的破解值是什么?
1 | john --format=Raw-SHA256 --wordlist=/usr/share/wordlists/rockyou.txt hash3.txt |

hash4.txt 的破解值是什么?
1 | john --format=Whirlpool --wordlist=/usr/share/wordlists/rockyou.txt hash4.txt |

破解 Windows 身份验证哈希
NThash 是现代 Windows 操作系统机器用于存储用户和服务密码的哈希格式。它也通常被称为 NTLM,这指的是之前版本的 Windows 用于哈希密码的格式 LM,因此 NT/LM
在 Windows 中,SAM (安全账户管理器) 用于存储用户账户信息,包括用户名和哈希过的密码。您可以通过在 Windows 机器上使用 Mimikatz 等工具转储 SAM 数据库,或使用 Active Directory 数据库:NTDS.dit 来获取 NTHash/NTLM 哈希。您可能不需要破解这些哈希来继续进行权限提升,因为您通常可以执行“哈希传递”(pass the hash) 攻击来代替,但有时,如果存在弱密码策略,破解哈希也是一个可行的选项。
实操以及回答问题
我们需要设置 –format 标志为多少才能破解这个哈希值
hash-id.py爆出是md5类型并且是个域缓存凭证
然后按类型搜md5搜到一个nt
这个密码破解后的值是什么?
1 | john --format=NT --wordlist=/usr/share/wordlists/rockyou.txt ntlm.txt |

破解 /etc/shadow 哈希
John 对所需数据格式非常挑剔,因此,要用unshadow处理一下
unshadow(要有sudo权限)
这个工具主要是将 /etc/shadow 与 /etc/passwd 文件结合生成供john破解的文件
1 | unshadow /etc/passwd /etc/shadow > unshadowed.txt |
处理好的文件内容如下
回答问题
root密码是多少
1 | john --wordlist=/usr/share/wordlists/rockyou.txt --format=sha512crypt etc_hashes.txt |

单一破解模式
适用场景
如果用户名是Markus,一些可能的密码可能是:
Markus1, Markus2, Markus3(等等)
MArkus, MARkus, MARKus(等等)
……….
用法以及回答问题
1 | john --single --format=raw-md5 hash07.txt |
理论上这样就行,但是肥肠坏,要先改文件,改成usr:hash的格式
然后再爆破
自定义规则
自定义规则定义在 john.conf 文件中
草,msf有john啊
如何创建自定义规则
第一行:
1 | [List.Rules:koi] |
然后使用正则表达式风格的模式匹配来定义单词将被修改的位置
1 | Az : 将单词与您定义的字符附加在末尾 |
还必须定义应该附加、前置或包含哪些字符。通过在方括号中添加字符集来实现,即它们应该使用的地方。这些字符集遵循双引号内的修饰符模式
1 | [0-9] : 将包含数字 0-9 |
比如一个示例规则
1 | [List.Rules:PoloPassword] |
用法
1 | john --wordlist=[字典] --rule=[规则名] [要破解的文件] |
破解受密码保护的 ZIP 文件
先转换hash值出来
1 | zip2john secure.zip > zip_hash.txt |
然后直接用字典破解就行
1 | john --wordlist=/usr/share/wordlists/rockyou.txt zip_hash.txt |

回答问题

破解受密码保护的 RAR 存档
1 | rar2john secure.rar > rar_hash.txt |
1 | john --wordlist=/usr/share/wordlists/rockyou.txt rar_hash.txt |

回答问题

破解 SSH 密钥
1 | ssh2john.py id_rsa > id_rsa_hash.txt |
1 | john --wordlist=/usr/share/wordlists/rockyou.txt id_rsa_hash.txt |




![[记录]尝试shiro有key无链利用,但失败](/img/c1/3.webp)

